package models

import (
	"errors"
	"time"

	"gorm.io/gorm"
)

type SysPermModule struct {
	ID           int64     `json:"id" gorm:"primaryKey"` // 权限资源id
	ParentID     int64     `json:"parent_id"`            // 权限块所在的功能模块id
	ModuleName   string    `json:"module_name"`          // 权限名称
	ModuleType   int       `json:"module_type"`          // 权限模块类型(0: 普通模块 1: Controller模块)。
	ShowOrder    int       `json:"show_order"`           // 排序编号
	CreateTime   time.Time `json:"create_time"`
	CreateUserID int64     `json:"create_user_id"`
	UpdateTime   time.Time `json:"update_time"`
	UpdateUserID int64     `json:"update_user_id"`
	DeletedFlag  int       `json:"deleted_flag"` // 1正常 -1 已经删除
}

func GetAllSysPermModuleList(module_name string, page, pageSize int) ([]SysPermModule, int64, error) {
	var depts []SysPermModule
	limit := pageSize
	var total int64
	var err error
	offset := pageSize * (page - 1)
	dbQuery := db.Offset(offset).Limit(limit).Order("show_order desc")
	if module_name != "" {
		dbQuery = db.Offset(offset).Limit(limit).Order("show_order desc").Where("dept_name like ?", "%"+module_name+"%")
	}
	err = dbQuery.Find(&depts).Error
	err = db.Model(&SysPermModule{}).Count(&total).Error
	return depts, total, err
}

func AddSysPermModule(perm SysPermModule) error {
	if !errors.Is(db.Where("module_name = ?", perm.ModuleName).First(&SysPermModule{}).Error, gorm.ErrRecordNotFound) {
		return errors.New("相同名称部门已经存在，无法添加")
	}
	return db.Create(&perm).Error
}
